//
//@File    :	14.24_manyfrnd.cpp
//@Time    :	2022/02/24 18:56:07
//@Auther  :	Sun Sheng
//@Contact :	970340843@qq.com
//@Desc    :	unbound template friend to a template class
//

#include <iostream>
using std::cout;
using std::endl;

template <typename T>
class ManyFriend
{
private:
    T item;

public:
    ManyFriend(const T &i):item(i){}
    template <typename C,typename D>friend void show2(C &,D &);
};

template <typename C,typename D>void show2(C &,D &)
{
    cout<<c.item<<", "<<d.item<<endl;
}


int main()
{
    ManyFriend<int>hfi1(10);
    ManyFriend<int>hfi2(20);
    ManyFriend<double>hfdb(10.5);
    cout<<"hfi1,hfi2: ";
    show2(hfi1,hfi2);
    cout<<"hfdb,hfi2: ";
    show2(hfdb,hfi2);

    system("pause");
    return 0;
}

//C++11模板别名
//1.使用typedef为u模板具体化指定别名
//typedef std::array<double,12> arrd;

//2. 使用模板提供一系列别名
//template<typename T>
// using arrtype = std::array<T,12>;
//可以使用arrtype<T>表示std::array<T,12>

//using= 与 typedef 等价,可以用于非模板
